#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
//	int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int* ptr1 = (int*)(&aa + 1);
//	int* ptr2 = (int*)(*(aa + 1));
//	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
//	return 0;
//}
int main()
{
	int line = 0;
	scanf("%d", &line);//输入的行（假设为7）控制上半部分菱形（包括中间那一行，所以上面7行，下面6行）
	int i = 0;
	//上半部分
	for (i = 0; i < line; i++)//i控制上半部分行的打印（有7行，所以0~i<line，i的值为0,1,2,3,4,5,6，然后跳出循环（i=7））
	{
		int j = 0;//j控制上半部分空格以及*的打印
		for (j = 0; j < line - 1 - i; j++)//第一个j的for先控制空格的打印（因为首先出现的是空格），
		{	                              //在上半部分中空格和行数的规律是 空格=line-1-i，j的上限条件值的变化为6,5,4,3,2,1,0，也就是每一行能打印的空格数
			printf(" ");			      //打印完第六行的空格时，i此时是5，下一次i=6，j=0，j<0,跳出循环j的这个小循环
		}							      


		for (j = 0; j < 2 * i + 1; j++)//第二个j的for循环，控制的是*的打印，在上半部分中
		{						       //*和行数的规律就是（2乘i+1），比如第一行是一个*，第二行是三个*，j的上限趋势为1,3,5,7,9,11,13
			printf("*");               //打印完第7行的*时，此时i=6，然后i++，i变成了7，此时跳出了i的这个大循环
		}
		printf("\n");//打印完一行换行
	}

	//下半部分
	for (i = 0; i < line - 1; i++)//i控制下半部分行的打印（有6行，所以0~i<line-1，i的值为0,1,2,3,4,5,然后跳出循环（i=6））
	{
		int j = 0;//j控制下半部分空格以及*的打印
		for (j = 0; j <=i; j++)//第一个j的for先控制空格的打印（因为首先出现的是空格），
		{	                   //在下半部分中空格和行数的规律是 空格=i，j=0的时候<=i（i第一次为0）j的 上限条件值的变化为1,2,3,4,5,6（第一行1个，第二行2个，第三行3个.........）
			printf(" ");	   //打印完第6行的空格的时候，此时i=5，然后i++，i变成了6，此时跳出i这个大循环
		}	                   
	
		for (j = 0; j <2*(line-1-i)-1 ; j++)//第二个j的for循环，控制的是*的打印，在下半部分中
		{							        //*和行数的规律就是（2*(line-1-i)-1），j的上限条件值的变化为11,9,7,5,3,1，（比如第一行是11*，第二行是9个*）
			printf("*");                    //打印完第6行的*时，此时i=5，然后i++，i变成了6，此时跳出了i的这个大循环
		}
		printf("\n");//打印完一行换行
	}

	return 0;
}//打印菱形